//http 请求  正则表达式

#include<iostream>
#include<string>
#include<regex>


int main()
{
    //HTTP请求行格式： GET /helloworld/sola/login?usr=sola&pass=123321 HTTP/1.1\r\n
    std::string str = "GET /helloworld/sola/login?usr=sola&pass=123321 HTTP/1.1";
    std::smatch matches;

    //请求方法匹配 GET HEAD POST PUT DELETE 。。。。
    
    std::regex e("(GET|HEAD|POST|PUT|DELETE) ([^?]*)(?:\\?(.*))? (HTTP/1\\.[01])(?:\n|\r|\r\n)?") ;
    // GET|HEAD|POST|PUT|DELETE 表示匹配其中任意一个字符串
    //[^?]匹配非问号 后面的*表示0次或多次
    //\\?(.*)         \\表示原始的？ 字符(.*)表示提取？后的任意字符0次或多次，直到遇到空格
    // HTTP/1 以其为开始  \\. 原始的.   [01] 0或1

    //(?:\n|\r|\r\n)?     (?: ....) 匹配某个格式字符串，但是不提取 ， 最后的？表示的是匹配前边的表达式0次或1次


    bool ret = std::regex_match(str,matches,e);
    if(ret == false)
    {
        std::cout<<"match false"<<std::endl;
        return -1;
    }
    for(auto& e: matches)
    {
        std::cout<<e<<std::endl;
    }



    return 0;
}
